パフォーマンスの計測 再入門 〜Unity 2020版〜
https://www.youtube.com/watch?v=UZ2sLiAM0oE&feature=youtu.be
Unity Japan 公式の動画
処理落ちの悪夢
入力した操作が反映されない
気づいたら死んでる
まずは、処理落ちしているか確認
1フレーム内で処理が終わっているか
60FPSだったら、1frame = 16ms
Render結果については、前フレームの結果を使うのでフレームをまたぐ
VSyncオフにしてると画面がずれることがある
フレーム内の処理が早くて時間が余っていても、次のVSync待ったりする
1msでも処理時間越えたら、次のフレームまで待つので、処理落ちの原因になる
CPUかGPUか
Gfx.WaitForPresentが呼ばれている場合は、CPU処理は時間が余っていてレンダリング待ちなのでGPUに問題がある
Gfx.WaitForCommandが呼ばれている場合は、GPUがCPU待ちになっているので、CPUに問題がある
Unity 2020からProfilerをStandaloneで起動できるモードできた
Editor処理のオーバーヘッドを減らせる
TotalとSelf
Totalは処理全部にかかった時間
非同期処理が待っている時間も計上される
Selfはその処理だけの時間
GC
GC.Alloc
メモリを確保する
GC.Collect
メモリを開放する
これがめっちゃ時間かかる
Profile Analyzerが便利
Totalであたりをつけて、Selfで怪しい処理を見つける
Compare機能で複数frame間の比較ができる
コードの変更前と変更後のパフォーマンス差分に気づける
Deep Profilerは重いので、mySamplerを作って Begin(), End() したらサクッと特定箇所のプロファイリングができる
ProfilerでJobSystemを誰がどこで呼んだか分かるようになった
描画の流れ
https://gyazo.com/d6ef144c02ba9cf2f1ca39d8b0120f6c
FrameDebuggerの内容が同じならSet Pass Callは増えない
SRPバッチング
SetPassを減らす
GPU自体の処理
ポリゴン数
フィルレート
オーバードロー
シェーダーの負荷
デバイスが苦手な表現の有無
GPU処理の確認方法
Xcode Frame Debbuger
これがオススメとのこと
GPUメーカー提供のデバッガー